/*
 *  Scripts incluídos antes deste:
 *      - API do Google Maps;
 *      - jquery.js;
 *      - jquery.maskedinput.js
 *      - bootstrap.js
 *      - googleMaps.js
 */

/* =========================================================================
 * Função principal que executa apenas quando o documento estiver
 * completamente carregado.
 * ========================================================================= */
$(document).ready(function() {
    // Obtém os botões do formulário.
    var signInButton = $('#signInButton');
    var signUpButton = $('#signUpButton');
    var backButton = $('#backButton');

    // Evento de clique no botão "Entrar".
    signInButton.click(function() {
        var email = $('#emailInput').val();
        var password = $('#passwordInput').val();
        loginRequest(email, password);
    });

    // Evento de clique no botão "Cadastre-se".
    if (signUpButton) {
        signUpButton.click(function() {
            location.href = "/usuarios/cadastrar.jsp";
        });
    }

    // Evento de clique no botão "Voltar".
    if (backButton) {
        backButton.click(function() {
            location.href = "/index.jsp";
        });
    }
});

/* =========================================================================
 * Função que faz uma requisição assíncrona (Ajax) de login.
 * ========================================================================= */
function loginRequest(email, password) {
    // Obtém os parâmetros da requisição.
    var url = "/ajax/loginValidator.jsp";
    var dataObj = {
        email: email,
        password: password
    };

    // Faz a requisição passando os parâmetros e as funções callback.
    $.ajax(url, {
        crossDomain: true,
        type       : 'POST',
        encoding   : 'ISO-8859-1',
        data       : dataObj
    }).done(function(data, textStatus) {
        loginResponse1(data, textStatus);
    }).fail(function(data, textStatus) {
        var message = "ERRO: Não foi possível processar a requisição.";
        loginResponse2(-3, message);
    });
}

/* =========================================================================
 * Função callback que executa quando a requisição assíncrona é
 * bem-sucedida.
 * ========================================================================= */
function loginResponse1(data, textStatus) {
    var obj = JSON.parse(data.trim());
    loginResponse2(obj.stat, obj.message);
}

/* =========================================================================
 * Função que exibe as mensagens ao usuário conforme a resposta recebida
 * pela requisição assíncrona.
 * ========================================================================= */
function loginResponse2(stat, message) {
    var responseDiv = $('#responseDiv').empty();

    // Caso a requisição tenha retornado erro ou login inválido.
    if (stat < 0) {
        var html = '<div class="alert alert-error">' +
                   '<button type="button" class="close" data-dismiss="alert">&times;</button>' +
                   '<span class="label label-important"><i class="icon-remove icon-white"></i></span> ' +
                    message + '</div>';
        responseDiv.fadeIn(500).delay(5000).fadeOut(500);
        responseDiv.append(html);
    }
    // Caso a requisição tenha retornado sucesso.
    else if (stat > 0) {
        // var html = '<div class="alert alert-success">' +
        //            '<button type="button" class="close" data-dismiss="alert">&times;</button>' +
        //            '<span class="label label-success"><i class="icon-ok icon-white"></i></span> ' +
        //             message + '</div>';
        // responseDiv.fadeIn(500).delay(5000).fadeOut(500);
        // responseDiv.append(html);
    }
    // Caso a requisição tenha retornado um aviso.
    else {
        var html = '<div class="alert">' +
                   '<button type="button" class="close" data-dismiss="alert">&times;</button>' +
                   '<span class="label label-warning"><i class="icon-warning-sign"></i></span> ' +
                    message + '</div>';
        responseDiv.fadeIn(500).delay(5000).fadeOut(500);
        responseDiv.append(html);
    }

    // Limpa os campos.
    $('#emailInput').val('');
    $('#passwordInput').val('');

    // Redireciona a página em caso de sucesso.
    if (stat > 0) {
        location.href = "/index.jsp";
    }
}
